package com.guoguo.utils.aliOss;

import com.guoguo.enums.AliOssImageEnum;

/**
 * Created by Administrator on 2017/9/18 0018.
 */

     /*
                           _ooOoo_
                          o8888888o
                          88" . "88
                          (| -_- |)
                          O\  =  /O
                       ____/`---'\____
                     .'  \\|     |//  `.
                    /  \\|||  :  |||//  \
                   /  _||||| -:- |||||-  \
                   |   | \\\  -  /// |   |
                   | \_|  ''\---/''  |   |
                   \  .-\__  `-`  ___/-. /
                 ___`. .'  /--.--\  `. . __
              ."" '<  `.___\_<|>_/___.'  >'"".
             | | :  `- \`.;`\ _ /`;.`/ - ` : | |
             \  \ `-.   \_ __\ /__ _/   .-` /  /
        ======`-.____`-.___\_____/___.-`____.-'======
                           `=---='
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 佛祖保佑       永无BUG
        */
public class AliOssImageConfig {
    //处理类型
    private int handleType;


    /**
     * 缩放
     * 将图片按照要求生成缩略图，或者进行特定的缩放。
     */
    //缩放类型（）
    private int resizeType;
    //图片宽  1-4096
    private int width;
    //图片高  1-4096
    private int height;
    //图片是否缩放。值是 1 表示不处理；值是 0 表示处理。
    private int limit;
    //按比例缩放。小于100，即是缩小，大于100即是放大。
    //如果想取到放大的图片，即增加参数调用limit,0
    private int proportion;


    /**
     * 裁剪
     * 用户可以将图片只保存圆形图案，如果图片的最终格式是 png、webp、 bmp 等支持透明通道的图片，
     * 那么图片非圆形区域的地方将会以透明填充。如果图片的最终格式是 jpg，那么非圆形区域是以白色进行填充。
     */
    //圆形半径
    private int radius;

    /**
     * 旋转
     */
    //角度（0-360）
    private int angle;

    /**
     * 图片效果
     * 包括模糊、亮度、对比度、锐化操作
     */
    // 模糊半径  1-50
    private int blur_radius;
    //模糊度  1-50
    private int ambiguity;
    //亮度  -100-100
    private int bright_value;
    //对比度  -100-100
    private int contrast_value;
    //锐化  50-399
    private int sharpen_value;


    /**
     * 水印
     * image,text,type必须base64编码
     */
    //透明度
    private int transparency;
    //水印位置
    private int positionType;
    //水平边距  0 – 4096
    private int X;
    //垂直边距  0 – 4096
    private int Y;
    //中线垂直偏移  -1000- 1000
    private int voffset;

    //图片水印
    //水印图片
    private String image;

    //文字水印
    //水印文字
    private String text;
    //文字类型
    private String type;
    //文字颜色
    private String color;
    //水印文字大小 0，1000
    private int size;
    //文字水印透明度  0,100
    private int shadow;
    //旋转角度 0,360
    private int rotate;
    //进行水印铺满的效果
    //1表示铺满，0表示效果无效
    private int fill;

    //    图文混排
    //文字，图片水印前后顺序
    // 0 图片在前(默认值)； order = 1 文字在前。
    private int order;
    //文字、图片对齐方式
    //0 上对齐(默认值) align = 1 中对齐 align = 2 下对齐
    private int align;
    //文字和图片间的间距 0, 1000
    private int interval;

    /**
     * 格式转换
     */
    private String formatType;

    private String styleName;


    /**
     * 缩放
     *
     * @param handleType
     * @param resizeType
     * @param width
     * @param height
     * @param limit
     * @param proportion
     */
    public AliOssImageConfig(int handleType, int resizeType, int width, int height, int limit, int proportion) {
        this.handleType = handleType;
        this.resizeType = resizeType;
        this.width = width;
        this.height = height;
        this.limit = limit;
        this.proportion = proportion;
    }

    /**
     * 裁切
     *
     * @param handleType
     * @param radius
     */
    public AliOssImageConfig(int handleType, int radius) {
        this.handleType = handleType;
        this.radius = radius;
    }

    /**
     * 模糊
     *
     * @param handleType
     * @param blur_radius
     * @param ambiguity
     */
    public AliOssImageConfig(int handleType, int blur_radius, int ambiguity) {
        this.handleType = handleType;
        this.blur_radius = blur_radius;
        this.ambiguity = ambiguity;
    }

    /**
     * 亮度，对比度，锐化
     *
     * @param handleType
     * @param bright_value
     * @param contrast_value
     * @param sharpen_value
     */
    public AliOssImageConfig(int handleType, int bright_value, int contrast_value, int sharpen_value) {
        this.handleType = handleType;
        this.bright_value = bright_value;
        this.contrast_value = contrast_value;
        this.sharpen_value = sharpen_value;
    }

    /**
     * 格式转换
     *
     * @param handleType
     * @param formatType
     */
    public AliOssImageConfig(int handleType, String formatType) {
        this.handleType = handleType;
        this.formatType = formatType;
    }

    /**
     * 水印
     *
     * @param transparency 透明度
     * @param positionType 水印位置
     * @param x            水平边距, 就是距离图片边缘的水平距离， 这个参数只有当水印位置是左上，左中，左下， 右上，右中，右下才有意义
     * @param y            垂直边距, 就是距离图片边缘的垂直距离， 这个参数只有当水印位置是左上，中上， 右上，左下，中下，右下才有意义
     * @param voffset      中线垂直偏移，当水印位置在左中，中部，右中时，可以指定水印位置根据中线往上或者往下偏移。
     * @param resizeType   水印图缩放类型
     * @param proportion   水印图缩放大小
     * @param image        水印图片的object名字
     * @param text         表示文字水印的文字内容
     * @param type         表示文字水印的文字类型
     * @param size         文字水印文字大小
     * @param shadow       文字水印的阴影透明度
     * @param rotate       文字顺时针旋转角度
     * @param fill         进行水印铺满的效果
     * @param order        文字，图片水印前后顺序
     * @param align        文字、图片对齐方式
     * @param interval     文字和图片间的间距
     */
    public AliOssImageConfig(int transparency, int positionType, int x, int y, int voffset, int resizeType, int proportion, String image, String text, String type, int size, int shadow, int rotate, int fill, int order, int align, int interval) {
        this.handleType = AliOssImageEnum.ALI_HANDLE_WATERMARK.getId();
        this.transparency = transparency;
        this.positionType = positionType;
        X = x;
        Y = y;
        this.voffset = voffset;
        this.image = image;
        this.text = text;
        this.type = type;
        this.size = size;
        this.shadow = shadow;
        this.rotate = rotate;
        this.fill = fill;
        this.order = order;
        this.align = align;
        this.interval = interval;
    }

    public AliOssImageConfig() {
    }

    /**
     * @param styleName
     */
    public AliOssImageConfig(String styleName) {
        this.handleType = AliOssImageEnum.ALI_HANDLE_SYTLE.getId();
        this.styleName = styleName;
    }


    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getStyleName() {
        return styleName;
    }

    public void setStyleName(String styleName) {
        this.styleName = styleName;
    }

    public int getHandleType() {
        return handleType;
    }

    public void setHandleType(int handleType) {
        this.handleType = handleType;
    }

    public int getResizeType() {
        return resizeType;
    }

    public void setResizeType(int resizeType) {
        this.resizeType = resizeType;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }

    public int getProportion() {
        return proportion;
    }

    public void setProportion(int proportion) {
        this.proportion = proportion;
    }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }

    public int getAngle() {
        return angle;
    }

    public void setAngle(int angle) {
        this.angle = angle;
    }

    public int getBlur_radius() {
        return blur_radius;
    }

    public void setBlur_radius(int blur_radius) {
        this.blur_radius = blur_radius;
    }

    public int getAmbiguity() {
        return ambiguity;
    }

    public void setAmbiguity(int ambiguity) {
        this.ambiguity = ambiguity;
    }

    public int getBright_value() {
        return bright_value;
    }

    public void setBright_value(int bright_value) {
        this.bright_value = bright_value;
    }

    public int getContrast_value() {
        return contrast_value;
    }

    public void setContrast_value(int contrast_value) {
        this.contrast_value = contrast_value;
    }

    public int getSharpen_value() {
        return sharpen_value;
    }

    public void setSharpen_value(int sharpen_value) {
        this.sharpen_value = sharpen_value;
    }

    public int getTransparency() {
        return transparency;
    }

    public void setTransparency(int transparency) {
        this.transparency = transparency;
    }

    public int getPositionType() {
        return positionType;
    }

    public void setPositionType(int positionType) {
        this.positionType = positionType;
    }

    public int getX() {
        return X;
    }

    public void setX(int x) {
        X = x;
    }

    public int getY() {
        return Y;
    }

    public void setY(int y) {
        Y = y;
    }

    public int getVoffset() {
        return voffset;
    }

    public void setVoffset(int voffset) {
        this.voffset = voffset;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getShadow() {
        return shadow;
    }

    public void setShadow(int shadow) {
        this.shadow = shadow;
    }

    public int getRotate() {
        return rotate;
    }

    public void setRotate(int rotate) {
        this.rotate = rotate;
    }

    public int getFill() {
        return fill;
    }

    public void setFill(int fill) {
        this.fill = fill;
    }

    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }

    public int getAlign() {
        return align;
    }

    public void setAlign(int align) {
        this.align = align;
    }

    public int getInterval() {
        return interval;
    }

    public void setInterval(int interval) {
        this.interval = interval;
    }

    public String getFormatType() {
        return formatType;
    }

    public void setFormatType(String formatType) {
        this.formatType = formatType;
    }
}
